Record where code under another licence may live - #187
Merged
Conversation
Entry two of the plan's decision issue was answered on 2026-08-24: an experiment may bring in code under a licence that is not this board's, only inside a quarantined directory carrying its own licence file. Record 0000 says a decision that exists only in an issue is not yet recorded, and this writes it down. The answer fixed the shape and not the layout, so this record fixes the layout and says why that placement rather than another. The directory is experiments/<slug>/borrowed/ with its licence at experiments/<slug>/borrowed/LICENSE, one per experiment, inside the experiment rather than at the root. Record 0002 refuses a root directory it does not name, so a shared quarantine at the root would be a change to that record, and it would also separate borrowed code from the experiment that borrowed it: deleting an abandoned experiment would leave its borrowed code behind, and two experiments borrowing different versions of one thing would collide in a directory neither owns. What the quarantine prevents is a footgun placed where attention is lowest. A tree that reads as uniform and is not fails on whoever promotes the result, which is later, elsewhere, and after the person who knew has stopped thinking about it. A directory named borrowed with a licence file in it is visible to somebody walking a tree; a line in a header is visible only to somebody who opened the header. The declaration is a Borrowed: field naming the source and the licence, and the record says plainly that the format does not carry that field today, so adding it is a change that goes through record 0013 rather than a header somebody writes and a reader discovers. NOTHING REFUSES A VIOLATION OF THIS TODAY and the record says so at the rule. No check reads borrowed/, no check reads the field, and the field is not part of the format yet. What stands behind it is this record, the guide and whoever reads the change. Writing that down is what stops the rule being mistaken for a gate. The gate at this head: go build, go vet and gofmt are silent, every package passes, and the runner reads 21 decision records over its own tree and refuses nothing. Refs #180 Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #180.
What this does
Entry two of #46 was answered on 2026-08-24: an experiment may bring in code
under a licence that is not this board's, only inside a quarantined directory
carrying its own licence file. Record
0000says a decision that exists only inan issue is not yet recorded, so this writes it down.
The answer fixed the shape and not the layout, so the record fixes the layout and
argues the placement rather than asserting it. The directory is
experiments/<slug>/borrowed/, its licence isexperiments/<slug>/borrowed/LICENSE, one per experiment, and it sits inside theexperiment rather than at the root.
Why inside the experiment. Record
0002refuses a root directory it does notname, and says so in its own words:
so a shared quarantine at the root is a change to that record rather than a
placement choice. The same record makes the layout inside a named directory
loose, and
experiments/<slug>/already holds one experiment and everything itneeds. A root quarantine would also separate borrowed code from the experiment
that borrowed it: deleting an abandoned experiment leaves its borrowed code
behind, and two experiments borrowing different versions of one thing collide in
a directory neither owns. Both are in section four.
What the quarantine buys. The boundary is in the layout rather than in
somebody's attention. A person promoting a result walks a directory tree, and a
directory named
borrowedwith a licence file in it is visible to a walk; adeclaration in a header is visible only to somebody who opened the header. The
failure the rule is written against lands on whoever promotes the result, which
is later, elsewhere, and after the person who knew has stopped thinking about it.
The declaration.
Borrowed:in the experiment record header names the sourceand the licence, and its absence means the experiment borrowed nothing. The
record says plainly that the format does not carry that field today, so adding it
is a change to the format that goes through
docs/decisions/0013-how-the-record-format-changes.mdrather than a headersomebody writes and a reader discovers.
What this record does not claim
Nothing in this repository refuses a violation of this rule today, and the
record says so at the rule rather than in a footnote. No check reads
borrowed/,no check reads the field, and the field is not part of the format yet. What
stands behind the rule is this record, the contributing guide and whoever reads
the change. That sentence is what stops the rule being read as a gate, and it is
the state on the day this lands rather than a permanent one - entry two's answer
says the check is ordinary gate work, and the runner already walks
experiments/and already reads the header.
It also does not decide which licences may be borrowed from. Some are
incompatible with promotion into a GPL plugin board whatever directory the code
sits in, and this record fixes where borrowed code lives rather than which
licences are acceptable.
The gate
Run at this head, in the order
CONTRIBUTING.mdnames:This adds no code, so it adds no refusal site and owes no fixture. What holds it
is the record checks already running over this tree: the section rule that
refuses a record missing any of the four headings, and the numbering rule that
refuses two records under one number. The run above is those checks reading
twenty-one records where they read twenty before.
The integration-hardware harness was not asked for and produced nothing here.
The means
Markdown under
docs/decisions/, because record0000fixes that decisions livethere one per file in that shape, and the checks that read a decision record
already read that directory. No language, runtime or dependency is added.
No second person has read this change. The gate output above stands in place of
one.